package com.education.welco.service;

import com.education.common.pojo.AjaxResult;
import com.education.welco.enums.FileTypeEnum;
import com.education.welco.pojo.PlatformResources;
import com.education.welco.pojo.SResources;
import com.education.welco.pojo.UserStar;
import com.education.welco.pojo.dto.FileUploadDTO;
import com.education.welco.pojo.vo.DirTreeNode;
import com.education.welco.pojo.vo.PathNodeVO;
import com.github.pagehelper.PageInfo;

import java.util.List;
import java.util.Map;
import java.util.Set;

/**
 * 平台资源 服务层
 *
 * @Author: liftsail
 * @Date: 2022-09-14
 * @Description: 不积跬步无以至千里
 */
public interface IPlatformResourcesService {

    /**
     * 查询平台资源信息
     *
     * @param id 平台资源ID
     * @return 平台资源信息
     */
    public PlatformResources selectPlatformResourcesById(Integer id);

    /**
     * 查询平台资源列表
     *
     * @param platformResources 平台资源信息
     * @return 平台资源集合
     */
    public List<PlatformResources> selectPlatformResourcesList(PlatformResources platformResources);

    /**
     * 新增平台资源
     *
     * @param platformResources 平台资源信息
     * @return 结果
     */
    public int insertPlatformResources(PlatformResources platformResources);

    /**
     * 修改平台资源
     *
     * @param platformResources 平台资源信息
     * @return 结果
     */
    public int updatePlatformResources(PlatformResources platformResources);

    /**
     * 删除平台资源信息
     *
     * @param ids 需要删除的数据ID
     * @return 结果
     */
    public int deletePlatformResourcesByIds(String ids);

    void mkdir(Long userId, String pid, String name);

    void mkFile(FileUploadDTO fileUploadDTO);

    PageInfo<PlatformResources> listTheDir(Long userId, String pid, Integer pageNum, Integer pageSize);

    PageInfo<PlatformResources> searchFile(String fileName, Long userId, Integer pageNum, Integer pageSize);

    PageInfo<PlatformResources> listTheTypeFile(Long userId, FileTypeEnum fileType, Integer pageNum, Integer pageSize);

    DirTreeNode dirTree(Long userId);

    AjaxResult move(String from, String to);

    AjaxResult move(List<String> from, String to);

    int rename(String fileId, String filename, String extension);

    int remark(String fileId, String fileRemark);

    int remark(List<String> fileIdList, String fileRemark);

    /**
     * 删除文件或者文件夹，删除文件夹时，文件夹里的文件也一并删除。此操作为逻辑删除
     *
     * @param id
     */
    void delete(String id);

    void delete(List<String> ids);

    /**
     * 获取这些文件或者目录及子文件、子目录
     *
     * @param userFileIdList
     * @param delete         如果是获取回收站文件及子文件true，获取非回收站文件false
     * @return
     */
    List<PlatformResources> getChildrenList(List<String> userFileIdList, Boolean delete);

    Map<String, PathNodeVO> getPathTreeMap(Long userId);

    /**
     * 学校资源目录树的接口编写
     *
     * @param userId   管理员id
     * @param schoolId 被分享学校id
     * @return
     */
    Map<String, PathNodeVO> getPathTreeForSchooolRes(Long userId, Integer schoolId);

    PageInfo<PlatformResources> listTheDirForStarList(UserStar userStar, Integer pageNum, Integer pageSize);

    int updatePlatformResourcesByIdListForShareState(List<String> sharedResId, boolean shareState);

    List<PlatformResources> selectShareSchoolResListBySchoolIdAndFileName(Integer teaId, List<String> ridCollect, String fileName, Set<String> extensionSet, Boolean inOrNot, Integer pageNum, Integer pageSize);

    List<PlatformResources> listTheDirByNameAndType(Long userId, String fileName, Set<String> extensionSet, Boolean inOrNot, String pid, Integer pageNum, Integer pageSize);

    /**
     * 通过id集合查询详细信息
     *
     * @param selectedIdList
     * @return
     */
    List<SResources> queryResInfoListByIdList(List<String> selectedIdList);
}